package com.zhouhong.LeetCode;

/**
 * @ClassName: Algorithm-and-Data-Structure
 * @Description:
 * @Author: zhouhong
 * @Create: 2021-04-01 23:40
 **/
//给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
//
// 说明：本题中，我们将空字符串定义为有效的回文串。
//
// 示例 1:
//
// 输入: "A man, a plan, a canal: Panama"
//输出: true
public class LeetCode0125 {
    public boolean isPalindrome(String s) {
        /**
         * 高层次（主干逻辑）
         * 1. filter out numner & char
         * 2. reverse and compare
        */
        // 过滤掉数字和字母
        String filteredStr = filterNonNumberAndChar(s);
        // 翻转后与过滤后的字符串比较
        return reversString(filteredStr).equalsIgnoreCase(filteredStr);
    }
    private String reversString(String s) {
        return new StringBuilder(s).reverse().toString();
    }
    private String filterNonNumberAndChar(String s){
        return s.replaceAll("[^A-Za-z0-9]","");
    }
}
